package com.hdy.common.statistics;

import android.content.Context;

import com.hdy.common.BuildConfig;
import com.hdy.common.log.LLog;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.commonsdk.statistics.common.DeviceConfig;

import java.util.Map;

public class HdyStatistics {

    private static HdyStatistics mHdyStatistics;
    private Context mContext;

    public static HdyStatistics getInstance() {
        if (mHdyStatistics == null) {
            synchronized (HdyStatistics.class) {
                if (mHdyStatistics == null) {
                    mHdyStatistics = new HdyStatistics();
                }
            }
        }
        return mHdyStatistics;
    }

    /**
     * 支持push业务的初始化
     * @param context
     * @param pushSecret
     */
    public void init(Context context, String pushSecret) {
        mContext = context;
        UMConfigure.init(context, UMConfigure.DEVICE_TYPE_PHONE, pushSecret);
        UMConfigure.setLogEnabled(BuildConfig.DEBUG);
    }

    /**
     * 仅数据统计的初始化
     * 如果需要在某个子进程中统计自定义事件，则需保证在此子进程中进行SDK初始化。
     * onEvent接口及onEventValue、onEventObject接口。其余API接口均不支持。
     * 所以子进程中仅能统计自定义事件数据，不支持启动、活跃、使用时长、页面等其它统计指标。
     * @param context
     */
    public void init(Context context) {
        mContext = context;
        UMConfigure.init(context, UMConfigure.DEVICE_TYPE_PHONE, null);
        // 选用AUTO页面采集模式
        MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
        // 支持在子进程中统计自定义事件
        UMConfigure.setProcessEvent(true);
        //错误统计开关，false-关闭错误统计功能；true-打开错误统计功能（默认打开）。
        MobclickAgent.setCatchUncaughtExceptions(!BuildConfig.DEBUG);

        LLog.i("打印测试设备mac："+getTestDeviceInfo(context)[0]);
    }

    public static String[] getTestDeviceInfo(Context context){
        String[] deviceInfo = new String[2];
        try {
            if(context != null){
                deviceInfo[0] = DeviceConfig.getDeviceIdForGeneral(context);
                deviceInfo[1] = DeviceConfig.getMac(context);
            }
        } catch (Exception e){
        }
        return deviceInfo;
    }

    /**
     * 统计应用时长
     */
    public void onResume() {
        MobclickAgent.onResume(mContext);
    }

    /**
     * 统计应用时长
     */
    public void onPause() {
        MobclickAgent.onPause(mContext);
    }

    /**
     * 统计页面跳转
     * @param viewName
     */
    public void onPageStart(String viewName) {
        MobclickAgent.onPageStart(viewName);
    }

    /**
     * 统计页面跳转
     * @param viewName
     */
    public void onPageEnd(String viewName) {
        MobclickAgent.onPageEnd(viewName);
    }

    public void onEvent(final String eventId) {
        MobclickAgent.onEvent(mContext, eventId);
    }

    public void onEvent(final String eventId, final String eventLabel) {
        MobclickAgent.onEvent(mContext, eventId, eventLabel);
    }

    public void onEvent(final String eventId, final Map<String, String> map) {
        MobclickAgent.onEvent(mContext, eventId, map);
    }

    public void onEventObject(final String eventId, final Map<String, Object> map) {
        MobclickAgent.onEventObject(mContext, eventId, map);
    }

    public void onEventValue(final String eventId, final Map<String, String> map, final int value) {
        MobclickAgent.onEventValue(mContext, eventId, map, value);
    }

    /**
     * 手动上报自己捕捉的错误(使用自动错误上报setCatchUncaughtExceptions，该方法可以不调用)
     * @param throwable
     */
    public void onError(final Throwable throwable) {
        MobclickAgent.reportError(mContext, throwable);
    }

    /***
     * 手动上报自定义错误
     * @param error
     */
    public void onError(final String error) {
        MobclickAgent.reportError(mContext, error);
    }

}
